package com.huawei.zyb.taskManager.domain.developer.repository;

import com.huawei.zyb.taskManager.domain.developer.entity.Developer;
import com.huawei.zyb.taskManager.domain.developer.valueobject.*;
import java.util.List;
import java.util.Optional;

/**
 * 开发者仓储接口
 * 定义开发者聚合的持久化契约
 */
public interface DeveloperRepository {
    
    /**
     * 保存开发者
     */
    Developer save(Developer developer);
    
    /**
     * 根据ID查找开发者
     */
    Optional<Developer> findById(DeveloperId developerId);
    

    
    /**
     * 根据角色查找开发者列表
     */
    List<Developer> findByRole(DeveloperRole role);
    
    /**
     * 根据状态查找开发者列表
     */
    List<Developer> findByStatus(DeveloperStatus status);
    
    /**
     * 查找所有开发者
     */
    List<Developer> findAll();
    
    /**
     * 根据ID删除开发者
     */
    void deleteById(DeveloperId developerId);
    
    /**
     * 检查开发者是否存在
     */
    boolean existsById(DeveloperId developerId);
    

    
    /**
     * 查找可分配任务的开发者
     */
    List<Developer> findAvailableDevelopers();
    
    /**
     * 根据姓名模糊查找开发者
     */
    List<Developer> findByNameContaining(String namePattern);
    
    /**
     * 查找管理角色的开发者
     */
    List<Developer> findManagementRoleDevelopers();
    
    /**
     * 检查开发者是否有未完成的任务
     */
    boolean hasIncompleteTasks(DeveloperId developerId);
}